perm filename ROMANL.MF[1,3]1 blob
sn#498472 filedate 1980-03-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00028 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 % This lower-case roman alphabet was prepared by D. E. Knuth in November, 1979,
C00004 00003 "The letter a"
C00007 00004 "The letter b"
C00008 00005 "The letter c"
C00009 00006 "The letter d"
C00010 00007 "The letter e"
C00012 00008 "The letter f"
C00013 00009 "The letter g"
C00017 00010 "The letter h"
C00018 00011 "The letter i"
C00019 00012 "The letter j"
C00020 00013 "The letter k"
C00022 00014 "The letter l"
C00023 00015 "The letter m"
C00025 00016 "The letter n"
C00026 00017 "The letter o"
C00027 00018 "The letter p"
C00028 00019 "The letter q"
C00029 00020 "The letter r"
C00030 00021 "The letter s"
C00033 00022 "The letter t"
C00035 00023 "The letter u"
C00036 00024 "The letter v"
C00038 00025 "The letter w"
C00041 00026 "The letter x"
C00043 00027 "The letter y"
C00045 00028 "The letter z"
C00046 ENDMK
C⊗;
% This lower-case roman alphabet was prepared by D. E. Knuth in November, 1979,
% inspired by the Monotype alphabet used in {\sl The Art of Computer Programming}.
% Its spacing is intended for text only.
% Character codes \¬141--\¬172 are generated.
"The letter a";
call charbegin(`a,9,0,sc,px,0,1/3[pe,px].slant+.5pwi+(sc-2)pu);
cpen; lft3x1=round 1.25u;
if top3(top3top6e+2)>.9[e,m]: top3y1=.9[e,m];
else: y1=top3top6e+2;
fi;
w3 draw 1; % bulb
hpen; lft0x2=lft3x1; y2=y1; x3=4u; top0y3=m+oo;
x4=x5=good1(r-2.5u); y4=1/3[e,m];
w0 draw 2{0,1}..3{1,0}; call `a arc(3,4,w1); % shoulder
if lcs=0: bot1y5=0; w1 draw 4..5; % stem
else: rt0x7=round(r-.05u); y5=.2[top1 0,e];
w1 draw 4..5; % stem
if rt1x5+.5u≤lft0x7: rt0x6=.5[rt1x5,rt0x7];
bot0y6=0; y7=.5e;
draw |w1#|5{0,-1}..|w0#|6{1,0}..7{0,1}; % hook
else: rt1x6=round(r-.25u); bot1y6=0;
w1 draw 5{0,-1}..6{1,0}; % foot
fi;
fi;
x8=x4; y8=e; x9=4u; y9=.9[w6,y8]; x10=x11+.25u; y10=.5[w6,y8];
x11=good2 1.5u; y11=.2[w6,y8];
x12=3u; bot0y12=-oo; x13=4u; y13=.015[y12,y8];
x14=x8; y14=.3[y12,y8]; x15=r-u; y15=e;
draw |w0|8{-1,0}..|w0#|9..|.9[w0,w2]|10..|w2#|11{0,-1}..
|.7[w0,w2]|12{1,0}..|w0#|13..14(..15). % bowl
"The letter b";
call charbegin(`b,10,sc,0,ph,0,.5px.slant+lcic);
hpen; x1=x2=x4=good1 2.5u; top1y1=h;
lft0x7=lft1x1; x3=x7; x5=x6=.5(r+u); rt0x8=rt1x2;
bot0y3=0; y4=.5[y5,y6]; top0y5=m+oo; bot0y6=-oo;
new aa; rt1x2=aa[x6,x4];
y2=y7=y8=(sqrt(1-aa.aa))[y4,y6]; % where bowl meets stem
w1 draw 1..2; % stem
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper serif
fi;
w0 ddraw 7..3, 8{0,-1}..3{x3-x8,.5(y3-y8)}; % spur
w0 draw 6{-1,0}..4{0,1}..5{1,0}; % left part of bowl
if w2>1.5u: rt2x9=round(r-.75u);
else: x9=good2(r-1.5u);
fi;
y9=y6; call `b darc(5,9,w2). % right part of bowl
"The letter c";
call charbegin(`c,8,0,0,px,0,px.slant-pu);
cpen; rt3x1=round(r-u);
if top3(top3top6e+2)>.9[e,m]: top3y1=.9[e,m];
else: y1=top3top6e+2;
fi;
w3 draw 1; % bulb
hpen; rt0x2=rt3x1; y2=y1; x3=x5=.5(r+u); top0y3=m+oo;
w0 draw 2{0,1}..3{-1,0}; % shoulder
if w2>1.5u: lft2x4=round(.75u);
else: x4=good2 1.5u;
fi;
y4=y5; bot0y5=-oo;
call `a darc(3,4,w2); % stroke
if w0=w1: x6=x2; x7-x5=x5-x4; y7=.5[y3,y5];
new aa; x6=aa[x5,x7]; y6=(sqrt(1-aa.aa))[y7,y5];
else: lft0x6=rt0x2; y6=.5e-1; x7=x6; y7=e;
fi;
w0 draw 5{1,0}..6(..7). % point
"The letter d";
call charbegin(`d,10,0,sc,ph,0,ph.slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1(r-2.5u); top1y1=h; bot1y2=0;
w1 draw 1..2; % stem
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper serif
call `b serif(2,1,1,lcs); % lower serif
fi;
bot0y3=-oo; top0y5=m+oo; y4=.5[y3,y5];
x3=x5=.5(r-u); x4=x2;
w0 draw 3{1,0}..4{0,1}..5{-1,0}; % right part of bowl
if w2>1.5u: lft2x6=round .75u;
else: x6=good2 1.5u;
fi;
y6=y3; call `c darc(5,6,w2). % left part of bowl
"The letter e";
call charbegin(`e,8,0,0,px,0,pe.slant+lcic+.25pu);
hpen; x3=.5r; top0y3=m+oo; y1=e; y2=.5[y5,y3];
if w2>1.5u: lft2x2=round .5u; rt1x1=round(r-.5u);
else: x2=good2 fixwidth[1.25u,1.5u]; x1=good1(r-fixwidth[1.25u,1.5u]);
fi;
bot0y5=-oo; x5=x3+.5u;
new save; save=sqrttwo; new sqrttwo; sqrttwo=sqrt 1.3save;
call `a arc(3,1,w1); % bowl
new sqrttwo; sqrttwo=save;
call `b arc(3,2,w2); call `c arc(5,2,w2); % stroke
new aa; y1=y4=aa[y2,y3]; x4-1=(sqrt(1-aa.aa))[x3,x2];
w0 draw 4..1; % bar
if w0=w1: x6=x1; x7-x5=x1-x3; y7=y2;
new aa; x6=aa[x5,x7]; y6=(sqrt(1-aa.aa))[y7,y5];
else: rt0x6=rt2x1; x7=x6; y6=.5e-1; y7=e;
fi;
w0 draw 5{1,0}..6(..7). % point
"The letter f";
call charbegin(`f,6,0,0,ph,0,ph.slant+pwiii-.75pu);
hpen; x1=good1 2.5u;
if fixwidth=0: lft3x2=round(r-1.25u);
else: rt3x2=round(r-u);
fi;
cpen; top3y2=.8[m,h];
call `a fstroke(2,1); % bulb, shoulder, stem, and serif
hpen; top0y3=m; y4=y3; lft0x3=lft1x1-1.5u-eps; rt0x4=rt1x1+1.5u+eps;
w0 draw 3..4. % bar
"The letter g";
if varg=0: % the following program is for a `classic' g shape
call charbegin(`g,9,0,0,px,pd,px.slant+.5pwiii-pu);
hpen; x3=good1 1.5u; x2=good1 2/3 r; x1-x3=x2-x1;
top0y1=m+oo; y2=y3=round 2/3e;
call `a darc(1,2,w1); call `b darc(1,3,w1); % bowl
x4=x2-u; y4=e;
x5=1/sqrttwo [x1,x2]; y5=1/sqrttwo [.5y1+.5y2,y1];
new w98,w99; w98=round .75[w6,w8]; w99=round .5[w0,w3];
if w99>1.25u: rt99x7=round(r-.25u);
else: x7=good99(r-1.5u);
fi;
cpen; rt6x6=rt99x7; x20=r-2u;
top99y7=.95[e,m]; y6=y7; top6y20=m+o;
w99 draw 7; w6 draw (4..)5..20{1,0}..6{0,-1}; % ear
vpen; x8=x2; y8=e;
x9=1/sqrttwo [x1,x3]; y9=1/sqrttwo [.5y1+.5y3,y3];
new w99; w99=round .5[w0,w1];
x10=x9+.75u; y10=y11=good98 .15e; x11=x13=.5r; x12=good99(r-u);
x21=good0(x9-.75u); y21=y22=.55[y9,y10]; rt11x21=rt0x22;
y12=.5[y11,y13]; bot6y13=-d-oo; x23=x10; y23=y15;
top98y11=top6y15; x15=x16=x11; bot98y11=bot6y16; x19=x10; y19=y16;
if w0>w98: cpen; w6 draw (8..)9..21{0,-1}..10{1,0}..11;
else: hpen; w0 ddraw (8..)9..21{0,-1}..19{1,0}..16,
(8..)9..22{0,-1}..23{1,0}..15; % left part of link
fi;
new stwo; stwo=sqrt(1.23114413sqrttwo);
x17=1/stwo [x15,x12]; y17=1/stwo [y12,y15];
x18=1/stwo [x16,x12]; y18=1/stwo [y12,y16];
hpen; w99 ddraw 15{1,0}..17{x12-x15,y12-y15}..12{0,-1},
16{1,0}..18{x12-x16,y12-y16}..12{0,-1}; % right part of link
draw 12{0,-1}..13{-1,0}; % right part of tail
x14=good99 u; y14=.5[y13,y16];
draw |w99|13{-1,0}..|w99#|14{0,1}..|w0#|19{1,0}; % left part of tail
else: % the following program is for a `simple' g shape
call charbegin(`g,9,0,0,px,pd,.9px.slant+.5pwi-pu);
hpen; x1=x2=good1(r-1.5u); x4=x1; x3=x5=.5r;
bot0y3=-oo; top0y5=m+oo; y4=.5[y3,y5];
w0 draw 3{1,0}..4{0,1}..5{-1,0}; % right part of bowl
if w2>1.5u: lft2x6=round .75u;
else: x6=good2 1.5u;
fi;
y6=y3; call `a darc(5,6,w2); % left part of bowl
cpen; top1y1=.95[e,m]; y2=0; w1 draw 1..2; % stem
hpen; x7=x2; bot1y7=-.25d; w1 draw 2..7; % link
x8=.5[x10,x7]; lft0x9=lft3x10=round u;
y9=y10; bot0y8=-d-oo;
if w3≤.75d: cpen; bot3y10=-.75d; w3 draw 10; % bulb
else: y9=good6(-.5d);
fi;
hpen; w0 draw 9{0,-1}..8{1,0}; call `b arc(8,7,w1); % tail
fi.
"The letter h";
call charbegin(`h,10,sc,sc,ph,0,1/3[pe,px].slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1 2.5u; x3=good1(r-2.5u);
top1y1=h; bot1y2=0;
w1 draw 1..2; % left stem
call `a hstroke(2,3,4); % shoulder and right stem
if lcs≠0: call `b sserif(1,1,2,-lcs); % upper serif
call `c serif(2,1,1,-lcs);
call `d serif(2,1,1,lcs); % lower left serif
call `e serif(4,1,3,-lcs);
call `f serif(4,1,3,lcs); % lower right serif
fi.
"The letter i";
call charbegin(`i,5,sc,sc,ph,0,ph.slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1 .5r; top1y1=m+ssd; bot1y2=0;
w1 draw 1..2; % stem
cpen; top3y3=h-ssd; rt3x3=rt1x1; w3 draw 3; % dot
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper serif
call `b serif(2,1,1,-lcs);
call `c serif(2,1,1,lcs); % lower serif
fi.
"The letter j";
call charbegin(`j,6,sc,0,ph,pd,ph.slant+.5pwi-2pu);
hpen; x1=x2=good1(r-2.5u);
if fixwidth=0: rt3x4=round 1.25u;
else: lft3x4=round u;
fi;
cpen; top3y3=h-ssd; rt3x3=rt1x1; w3 draw 3; % dot
bot3y4=-.9d; w3 draw 4; % bulb
hpen; top1y1=m+ssd; bot1y2=-1/3 d;
bot0y5=-d-oo; y4=y6; lft0x6=lft3x4; x5=.5[x2,x6];
draw |w1|1..|w1#|2{0,-1}..|w0#|5{-1,0}..6{0,1}; % stem and tail
if lcs≠0: call `a sserif(1,1,2,-lcs); % serif
fi.
"The letter k";
call charbegin(`k,10,sc,sc,ph,0,px.slant+.5pwi+(lcs+sc-2)pu);
hpen; x1=x2=x5=good1 2.5u;
x3=good1(r-2.5u); rt1x3=rt0x4;
top1y1=h; top0y4=m; bot1y2=bot1y3=0; y5=.75e;
new aa,bb; % auxiliaries for intersection of lines
rt1x6=aa[rt1x1,rt1x3]; y6=aa[bot0m,y3];
rt1x6=bb[x5,x4]; y6=bb[y5,y4];
w1 draw 6..3; % lower diagonal
lpen#; w1 draw 4..5; % erase excess
hpen; w1 draw 1..2; % stem
w0 draw 4..5; % upper diagonal
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper stem serif
call `c serif(2,1,1,-lcs);
if x2+2.25lcs.u+w1+.5u≤x3: call `d serif(2,1,1,lcs); % lower stem serif
else: call `d serif(2,1,1,(x3-x2-w1)/u-1.25lcs-.5);
fi;
call `e dserif(4,0,5,-1.25lcs);
call `f dserif(4,0,5,lcs); % upper diagonal serif
call `g serif(3,1,6,-1.25lcs);
call `h serif(3,1,6,lcs); % lower diagonal serif
fi.
"The letter l";
call charbegin(`l,5,sc,sc,ph,0,ph.slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1 .5r; top1y1=h; bot1y2=0;
w1 draw 1..2; % stem
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper serif
call `b serif(2,1,1,-lcs);
call `c serif(2,1,1,lcs); % lower serif
fi.
"The letter m";
call charbegin(`m,15,sc,sc,px,0,1/3[pe,px].slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1 2.5u; x3=good1 .5r; x5-x3=x3-x1;
top1y1=m+ssd; bot1y2=0;
w1 draw 1..2; % left stem
call `a hstroke(2,3,4); % left shoulder and middle stem
call `b hstroke(4,5,6); % right shoulder and right stem
if lcs≠0: call `c sserif(1,1,2,-lcs); % upper serif
if 4lcs.u+2w1>x5-x1-u: new aa; 4aa.u+2w1=x5-x1-u;
else: new aa; aa=lcs;
fi;
call `d serif(2,1,1,-lcs);
call `e serif(2,1,1,aa); % lower left serif
call `f serif(4,1,3,-aa);
call `g serif(4,1,3,aa); % lower middle serif
call `h serif(6,1,5,-aa);
call `i serif(6,1,5,lcs); % lower right serif
fi.
"The letter n";
call charbegin(`n,10,sc,sc,px,0,1/3[pe,px].slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1 2.5u; x3=good1(r-2.5u);
top1y1=m+ssd; bot1y2=0;
w1 draw 1..2; % left stem
call `a hstroke(2,3,4); % shoulder and right stem
if lcs≠0: call `b sserif(1,1,2,-lcs); % upper serif
call `c serif(2,1,1,-lcs);
call `d serif(2,1,1,lcs); % lower left serif
call `e serif(4,1,3,-lcs);
call `f serif(4,1,3,lcs); % lower right serif
fi.
"The letter o";
call charbegin(`o,9,0,0,px,0,.5px.slant);
hpen; x1=r-x1; % axis of left-right symmetry
lft2x2=round fixwidth[.5u,.75u];
x1-x2=x3-x1; top0y1=m+oo; bot0y2=-oo; y2=y3;
call `a darc(1,2,w2); % left part of bowl
call `b darc(1,3,w2). % right part of bowl
"The letter p";
call charbegin(`p,10,sc,0,px,pd,.5px.slant+lcic);
hpen; x1=x2=x3=good1 2.5u; x4=x5=.5(r+u);
if w2>1.5u: rt2x6=round(r-.75u);
else: x6=good2(r-1.5u);
fi;
top1y1=m+ssd; bot1y2=-d; top0y4=m+oo; bot0y5=-oo;
y3=.5[y4,y5]; y6=y5;
w1 draw 1..2; % stem
w0 draw 5{-1,0}..3{0,1}..4{1,0}; % left part of bowl
call `a darc(4,6,w2); % right part of bowl
if lcs≠0: call `b sserif(1,1,2,-lcs); % upper serif
call `c serif(2,1,1,-lcs);
call `d serif(2,1,1,lcs); % lower serif
fi.
"The letter q";
call charbegin(`q,10,0,1,px,pd,px.slant+.5pwi-pu);
hpen; x1=good1(r-2.5u); x5=.5(r-u); x2=x1=x4; bot1y1=-d;
rt0x7=rt1x1; x3=x7; x5=x6; lft0x8=lft1x2;
top0y3=m+oo; y4=.5[y5,y6]; top0y5=m+oo; bot0y6=-oo;
new aa; lft1x2=aa[x6,x4];
y2=y7=y8=(sqrt(1-aa.aa))[y4,y5]; % where bowl meets stem
if lcs≠0: call `a serif(1,1,2,-lcs);
call `b serif(1,1,2,lcs); % lower serif
fi;
w1 draw 1..2; % stem
w0 ddraw 7..3, 8{0,1}..3{x3-x8,.5(y3-y8)}; % spur
w0 draw 6{1,0}..4{0,1}..5{-1,0}; % right part of bowl
if w2>1.5u: lft2x9=round .75u;
else: x9=good2 1.5u;
fi;
y9=y6; call `c darc(5,9,w2). % left part of bowl
"The letter r";
call charbegin(`r,7,sc,0,px,0,px.slant+pwiii-1.75pu);
hpen; x1=x2=good1 2.5u; top1y1=m+ssd; bot1y2=0;
w1 draw 1..2; % stem
cpen; rt3x3=rt0x4; lft3x3=round(r-2.25u); top3y3=.9[e,m]; y4=y3;
w3 draw 3; % bulb
hpen; x5=x1; y5=e; x6=5u; top6y6=m+oo;
w0 draw 5{0,1}..6{1,0}..4{0,-1}; % shoulder
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper serif
call `b serif(2,1,1,-lcs);
call `c serif(2,1,1,lcs); % lower serif
fi.
"The letter s";
call charbegin(`s,7,0,0,px,0,px.slant-.5pu);
hpen; top0y1=m+oo; bot0y5=-oo;
x3=.5r; (y3-w6-.5w8)/(m-2w6-w8)=e/m; % white space ratio
lft11x2=round u;
if lcs=0: x1=x5=x3; lft0x6=round .75u; x7=x4; rt11x4=round(r-u);
y6=1/3[top0 0,y3]; y7=1/4[bot0m,y3];
w0 draw 6{x5-x6,3(y5-y6)}..5{1,0}; % lower left stroke
draw 7{x1-x7,2(y1-y7)}..1{-1,0}; % upper right stroke
else: if w0=w1: x1=x5=x3; x6=x2; x7=x4; rt11x4=round(r-u);
y6=1/3[top0 0,y3]; y7=1/4[bot0m,y3];
w0 draw 6{x5-x6,3(y5-y6)}..5{1,0}; % lower left stroke
draw 7{x1-x7,2(y1-y7)}..1{-1,0}; % upper right stroke
x8=x9=x6; y9=y6+.5lcs.aspect.u+eps; bot0y8=0;
x10=x11=x7; y11=y7-.5lcs.aspect.u-eps; top0y10=m;
w0 draw 8..9; % lower serif
draw 10..11; % upper serif
else: x1=x3-.5u; x5=x3+.5u; x6=x2; rt0x7=round(r-u); rt11x4=round(r-.5u);
y6=good6(5/7 y3)-1; y7=good6(2/7[y3,m])+1;
bot0y8=0; y9=y6; x8=x6; rt1x6=rt0x9;
top0y10=m; y11=y7; x10=x7; lft1x7=lft0x11;
w0 ddraw 6..8, 9..8; % lower serif
ddraw 7..10, 11..10; % upper serif
rpen#; w1 draw 6{0,-1}..5{1,0}; % erase excess
lpen#; w1 draw 7{0,1}..1{-1,0}; % ditto
hpen; w0 draw 6{0,-1}..5{1,0}; % lower left stroke
draw 7{0,1}..1{-1,0}; % upper right stroke
fi;
fi;
new aa;
if m-e>e: aa=m-e;
else: aa=e;
fi;
call `a sdraw(1,2,3,4,5,w11,w8,-aa/(12u)). % middle stroke
"The letter t";
if px-pe<.75(ph-px): call charbegin(`t,7,0,0,2px-pe,0,px.slant+.5pwi-2pu);
y1=2m-e;
else: call charbegin(`t,7,0,0,.75[px,ph],0,px.slant+.5pwi-2pu);
y1=.75[m,h];
fi;
hpen; x1=x2=good1 2.5u; top0y2=m;
if w0=w1: w1 draw 1..2; % upper terminal
else: rt1x1=rt0x3; lft0x4=lft1x1-1.5u-eps; y4=y5=y2; y3=y1; x5=x3;
w0 ddraw 4{1,0}..3{0,1}, 4..5; % left and upper terminals
fi;
lft0x6=lft1x1-1.5u-eps; rt0x7=rt1x1+2.5u+eps;
top0y6=m; y7=y6; w0 draw 6..7; % bar
x8=x1; bot0y8=.5e; w1 draw 2..8; % stem
if pw>1.75pu: bot0y9=0; x9=r-2.5u; rt0x10=r-.25u; x11=r+u; y11=e;
new aa; x10=aa[x9,x11]; y10=(sqrt(1-aa.aa))[y11,y9];
w0 draw 9{1,0}..10(..11); % hook
else: bot0y9=-oo; y10=.8 e; x9=.5[x8,x10]; x10=good0(r-.75u);
w0 draw 9{1,0}..10{0,1}; % hook
fi;
call `a arc(9,8,w1). % link
"The letter u";
call charbegin(`u,10,sc,sc,px,0,px.slant+.5pwi+(sc-2)pu);
hpen; x1=x2=good1 2.5u; x3=x4=good1(r-2.5u); lft0x5=lft1x3;
top1y1=m+ssd; m-y2=1/3[e,m]; m-y5=1/4[e,m]; % prepare for upside-down \\{hstroke}
x6=.5[x2,x5]; bot0y6=-oo;
x7=1/sqrttwo [x6,x2]; y7=1/sqrttwo [y2,y6];
draw |w0|5{0,-1}..|w0#|6{-1,0}..|.6[w0,w1]|7{x2-x6,y2-y6}..
|w1#|2{0,1}..1; % stroke
y4=y1; bot1y3=0; w1 draw 3..4; % stem
if lcs≠0: call `a sserif(1,1,2,-lcs); % upper left serif
call `b sserif(4,1,3,-lcs); % upper right serif
call `c serif(3,1,4,lcs); % lower serif
fi.
"The letter v";
if lcs=0: call charbegin(`v,10,sc,sc,px,0,px.slant+.5pw+(sc-2)pu);
else: call charbegin(`v,10,sc,.5+sc,px,0,px.slant+.5pw+(lcs+sc-1.5)pu);
fi;
if fudge≠1: new w0,w1; % lines will be thinner in fudged styles
w0=round(fudge.pixels.pw+blacker);
w1=round(fudge.pixels.pwi+blacker);
fi;
hpen; x1=good1(2.5u-.5(w2-w0)); x4=good0(r-2.5u);
x2-x1=x4-x3; lft0x3=lft1x2+del;
top1y1=m; y4=y1; y3=y2;
if del>.2w0: bot1y2=0;
else: bot1y2=-o;
fi;
w1 draw 1..2; w0 draw 2..3; % left diagonal stroke
rpen#; w1 draw 3..4; % erase excess at lower right
hpen; w0 draw 3..4; % right diagonal stroke
if lcs≠0: call `a serif(1,1,2,-lcs);
call `b serif(1,1,2,lcs); % left serif
call `c dserif(4,0,3,-lcs);
call `d dserif(4,0,3,lcs); % right serif
fi;
if fudge≠1: new w0,w1; % restore normal sizes in fudged styles
w0=round(pixels.pw+blacker); w1=round(pixels.pwi+blacker);
fi.
"The letter w";
call charbegin(`w,13,sc,sc,px,0,px.slant+.5pw+(lcs+sc-1.5)pu);
if fudge≠1: new w0,w1; % lines will be thinner in fudged styles
w0=round(fudge.fudge.pixels.pw+blacker);
w1=round(fudge.fudge.pixels.pwi+blacker);
fi;
hpen; x1=good1 2u; rt0x9=rt1x10; x11-x10=x9-x1; x11=r+(lcs-lcss-2)u;
% $x↓9$, $x↓{10}$, and $x↓{11}$ are approximations to $x↓4$, $x↓5$, and $x↓8$.
x5-x1=x6-x2=x7-x3=x8-x4=round(x10-x1);
% The idea is to draw two v's displaced by an integer amount.
top1y1=m; y3=y6=y7=y2; y4=y5=y8=y1;
if del>.2w0: bot1y2=0;
else: bot1y2=-o;
fi;
rt0x4=rt1x5; lft0x3=lft1x2+del; x2-x1=x4-x3;
w1 draw 1..2; w0 draw 2..3; % first diagonal
rpen#; w1 draw 3..4; % erase excess
hpen; w0 draw 3..4; % second diagonal
w1 draw 5..6; w0 draw 6..7; % third diagonal
rpen#; w1 draw 7..8; % erase excess
hpen; w0 draw 7..8; % fourth diagonal
if lcs≠0: call `a serif(1,1,2,-lcs);
if (3lcs+lcss).u+del+1.5w1+.5w0>x8-x1-u: new aa;
(3lcs+lcss-4aa).u+del+1.5w1+.5w0=x8-x1-u;
else: new aa; aa=0;
fi;
call `b serif(1,1,2,lcs-aa); % left serif
call `c serif(5,1,6,-lcss-del/u+aa);
call `d serif(5,1,6,lcs+aa); % middle serif
call `e dserif(8,0,7,-lcs-aa);
call `f dserif(8,0,7,lcss); % right serif
fi;
if fudge≠1: new w0,w1; % restore normal sizes in fudged styles
w0=round(pixels.pw+blacker); w1=round(pixels.pwi+blacker);
fi.
"The letter x";
call charbegin(`x,10,sc,sc,px,0,px.slant+.5pwi+(sc+lcs-2)pu);
hpen; new w99; w99=round .5[w1,w2];
x1=x3=good99(2.5-lcs+lcss)u; x2=x4=r-x1;
top99y1=top0y2=m; bot0y3=bot99y4=0;
w99 draw 1..4; % upper left to lower right diagonal
w0 draw 3..2; % lower left to upper right diagonal
if lcs≠0: call `a serif(1,99,4,-lcss);
call `b serif(1,99,4,2[lcss,lcs]); % upper left serif
call `c serif(4,99,1,-2[lcss,lcs]);
call `d serif(4,99,1,lcss); % lower right serif
new ss; ss=.5(w99-w0)/u; % correction to \\{lcs} makes $w↓0$ like $w↓{99}$
call `e dserif(2,0,3,-2[lcss,lcs]-ss);
call `f dserif(2,0,3,lcss+ss); % upper right serif
call `g dserif(3,0,2,-lcss-ss);
call `h dserif(3,0,2,2[lcss,lcs]+ss); % lower left serif
fi.
"The letter y";
call charbegin(`y,10,sc,.5+sc,px,pd,px.slant+.5pw+(lcs+sc-1.5)pu);
hpen; x1=good1(2.5u-.5(w2-w0)); x4=good0(r-2.5u);
x2-x1=x4-x3; lft0x3=lft1x2+.5del;
top1y1=m; y4=y1; bot1y2=-o;y3=y2;
w1 draw 1..2; w0 draw 2..3; % left diagonal stroke
rpen#; w1 draw 3..4; % erase excess at lower right
cpen; lft3x8=lft0x7=round .25u;
bot3y8=-.9d; y7=y8; w3 draw 8; % bulb
hpen; x6=2u; bot0y6=-d-oo; bot0y5=-.5d;
new aa; x5=aa[x3,x4]; y5=aa[y3,y4];
w0 draw 4..3{x3-x4,y3-y4}..6{-1,0}..7{0,1}; % right diagonal and tail
if lcs≠0: call `a serif(1,1,2,-lcs);
call `b serif(1,1,2,lcs); % left serif
call `c dserif(4,0,3,-lcs);
call `d dserif(4,0,3,lcs); % right serif
fi.
"The letter z";
call charbegin(`z,8,0,0,px,0,px.slant-.5pu);
hpen; lft1x2=round u; rt1x1=round(r-u);
top1y1=m; bot1y2=0;
lft0x3=round 1.3u; x4=round(x3-.3u); y3=y1; y4=y3-as/1.2;
rt0x5=round(r-1.3u); x6=round(x5+.3u); y5=y2; y6=y5+as;
x10=.25[x1,x3]; x11=.25[x2,x5]; y10=y1; y11=y2;
w0 draw 1..10; call `a arm(10,3,4); % upper arm and serif
w1 draw 1..2; % diagonal stroke
w0 draw 2..11; call `b arm(11,5,6). % lower arm and serif